package com.ufcg.lvc.client.prototipacao;

import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.AbsolutePanel;
import com.smartgwt.client.util.BooleanCallback;
import com.smartgwt.client.util.SC;
import com.smartgwt.client.widgets.grid.ListGridRecord;
import com.ufcg.lvc.client.GreetingServiceCRUD;
import com.ufcg.lvc.client.GreetingServiceCRUDAsync;
import com.ufcg.lvc.client.UserData;
import com.ufcg.lvc.client.MyListGrids.QuestoesListGrid;

public class MinhasQuestoes {

	MyPanel panelQuestoes;
	private QuestoesListGrid listGrid;
	UserData UD;
	
	public MinhasQuestoes(UserData uD) {
	UD = uD;
//	public MinhasQuestoes(boolean addQuestaoProva) {
//		this.addQuestaoProva = addQuestaoProva;
		final AsyncCallback<Boolean> callback = new AsyncCallback<Boolean>() {
			@Override
			public void onFailure(Throwable caught) {
				System.out.println("Erro na comunicação com o servidor");
			}

			@Override
			public void onSuccess(Boolean result) {
			}
		};
		
		panelQuestoes = new MyPanel("Minhas questões", "Nova questão", "Criar nova questão");
		
		listGrid = new QuestoesListGrid(getServicoCRUD(), UD);
		panelQuestoes.add(listGrid, 60, 69);

		com.google.gwt.user.client.ui.Button btnExibir = new com.google.gwt.user.client.ui.Button("Exibir");
		panelQuestoes.add(btnExibir, 555, 342);
		btnExibir.setSize("91px", "29px");
		
		panelQuestoes.getBtnCriarNovoObje().addClickHandler(new ClickHandler() {
			@Override
			public void onClick(ClickEvent event) {
				panelQuestoes.clear();
				NovaQuestao n = new NovaQuestao(UD);
				panelQuestoes.add(n.getPanel());
		}});	

		panelQuestoes.getBtnEditar().addClickHandler(new ClickHandler() {
			@Override
			public void onClick(ClickEvent event) {
				try {
					ListGridRecord elem = listGrid.getSelectedRecord();
					NovaQuestao n = new NovaQuestao(
							elem.getAttribute("titulo"),
							elem.getAttribute("assunto"),
							elem.getAttribute("enunciado"), 
							elem.getAttribute("tipo"), 
							elem.getAttribute("dificuldade"),false,UD);
					panelQuestoes.clear();
					panelQuestoes.add(n.getPanel());	
				} catch (Exception e) {
					Window.alert("Selecione a questão que deseja editar.");
				}
		}});
		
		panelQuestoes.getBtnExcluir().addClickHandler(new ClickHandler() {
			@Override
			public void onClick(ClickEvent event) {
				try {
					if (listGrid.getSelectedRecord() != null) {
						SC.ask("Deseja excluir esta questão?", new BooleanCallback() {  
		                    public void execute(Boolean value) {  
		                        if (value != null && value) {                          	
		                        	ListGridRecord elem = listGrid.getSelectedRecord();
		        					getServicoCRUD().deletarLinha("questao", "titulo", elem.getAttribute("titulo"), UD.getId_usuario(), callback);
		        					listGrid.loadDados(UD);  
		                        }  
		                    }  
		                });
					}else {
						Window.alert("Selecione a questão que deseja excluir.");	
					}
				} catch (Exception e) {
					Window.alert("Selecione a questão que deseja excluir.");
				}
		}});
		
		btnExibir.addClickHandler(new ClickHandler() {
			@Override
			public void onClick(ClickEvent event) {
				try {
					ListGridRecord elem = listGrid.getSelectedRecord();
					NovaQuestao n = new NovaQuestao(
							elem.getAttribute("titulo"),
							elem.getAttribute("assunto"),
							elem.getAttribute("enunciado"), 
							elem.getAttribute("tipo"), 
							elem.getAttribute("dificuldade"),true, UD);
					n.getBtnVoltarSetClickHandler(new ClickHandler() {
						@Override
						public void onClick(ClickEvent event) {
							panelQuestoes.clear();
							final MinhasQuestoes n = new MinhasQuestoes(UD);
							panelQuestoes.add(n.getPanel());
						}
					});
					
					panelQuestoes.clear();
					panelQuestoes.add(n.getPanel());	
				} catch (Exception e) {
					Window.alert("Selecione a questão que deseja exibir.");
				}
			}
		});
	}

	public static GreetingServiceCRUDAsync getServicoCRUD() {
		return GWT.create(GreetingServiceCRUD.class);
	}

	public AbsolutePanel getPanel() {
		return panelQuestoes;
	}
}
